package de.widas.gaesf.service;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import de.widas.gaesf.dataobject.Eintrag;

/**
 * Created on: 24.09.2009, 16:18:24<br/>
 * Copyright 2009 by WidasConcepts GmbH<br/>
 *
 * @author Meykel Gruel
 * 
 */
public class EintragManagerImpl implements EintragManager {
	
	private EntityManagerFactory entityManagerFactory;

	/* (non-Javadoc)
	 * @see de.widas.gaesf.service.PersistenceManager#getObjects()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<Eintrag> getObjects() {
		Query lQuery = getEntityManager().createQuery("SELECT FROM Eintrag e");
		try {
			return new ArrayList<Eintrag>(lQuery.getResultList());
		} catch (Exception e) {
			return new ArrayList<Eintrag>();
		}
	}

	/* (non-Javadoc)
	 * @see de.widas.gaesf.service.PersistenceManager#remove(java.lang.Object)
	 */
	@Override
	public void remove(Eintrag pObj) {
		EntityManager lEM = getEntityManager();
		Query lQuery = lEM.createQuery("DELETE FROM Eintrag e WHERE text = :eintragText AND autor = :eintragAutor");
		lQuery.setParameter("eintragText", pObj.getText());
		lQuery.setParameter("eintragAutor", pObj.getAutor());
		lQuery.executeUpdate();
		lEM.close();
	}
	
	/*
	 * (non-Javadoc)
	 * @see de.widas.gaesf.service.EintragManager#removeAlle()
	 */
	@Override
	public void removeAlle() {
		EntityManager lEM = getEntityManager();
		Query lQuery = lEM.createQuery("DELETE FROM Eintrag e");
		lQuery.executeUpdate();
		lEM.close();
	}

	/* (non-Javadoc)
	 * @see de.widas.gaesf.service.PersistenceManager#save(java.lang.Object)
	 */
	@Override
	public void save(Eintrag pObj) {
		EntityManager lEM = getEntityManager();
		lEM.merge(pObj);
		lEM.persist(pObj);
		lEM.close();
	}
	
	private EntityManager getEntityManager() {
		return entityManagerFactory.createEntityManager();
	}

	/**
	 * @param pEntityManagerFactory the entityManagerFactory to set
	 */
	public void setEntityManagerFactory(EntityManagerFactory pEntityManagerFactory) {
		entityManagerFactory = pEntityManagerFactory;
	}
	
}
